package 普通数组

/*
https://leetcode.cn/problems/product-of-array-except-self/?envType=study-plan-v2&envId=top-100-liked

238. 除自身以外数组的乘积

给你一个整数数组 nums，返回 数组 answer ，
其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法，且在 O(n) 时间复杂度内完成此题。

示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
*/
func productExceptSelf(nums []int) []int {

	n := len(nums)      //1.获取数组长度
	B := make([]int, n) //2.声明结果数组

	product := 1 //3.从左到右计算每个B[i]左边的数的乘积，并存储到对应位置
	for i := 0; i < n; i++ {
		B[i] = product
		product *= nums[i]
	}

	product = 1 //4.从右到左计算每个B[i]右边的数的乘积，并累乘到已经计算好的每个位置左边的乘积上
	for i := n - 1; i >= 0; i-- {
		B[i] *= product
		product *= nums[i]
	}

	return B
}
